*&---------------------------------------------------------------------*
*& Report ZEX_LISTING_51                                               *
*&---------------------------------------------------------------------*
*& Created By: James Wood (james.wood@bowdarkconsulting.com)           *
*& Created On: 12/12/2008                                              *
*& Purpose:    This program demonstrates the use of inheritance with   *
*&             some simple employee classes (as per Listing 5.1).      *
*&---------------------------------------------------------------------*
REPORT zex_listing_51.

*----------------------------------------------------------------------*
*       CLASS lcl_employee DEFINITION
*----------------------------------------------------------------------*
*
*----------------------------------------------------------------------*
CLASS lcl_employee DEFINITION.
  PUBLIC SECTION.
    DATA: id TYPE numc10 READ-ONLY. "Demo Purposes Only!!
ENDCLASS.                    "lcl_employee DEFINITION

*----------------------------------------------------------------------*
*       CLASS lcl_hourly_employee  DEFINITION
*----------------------------------------------------------------------*
*
*----------------------------------------------------------------------*
CLASS lcl_hourly_employee DEFINITION
      INHERITING FROM lcl_employee.

  PUBLIC SECTION.
    METHODS:
      constructor IMPORTING im_id   TYPE numc10
                            im_wage TYPE bapicurr_d,
      calculate_wage.

  PRIVATE SECTION.
    CONSTANTS: co_workweek TYPE i VALUE 40.
    DATA: hourly_wage TYPE bapicurr_d.

ENDCLASS.                    "lcl_hourly_employee  DEFINITIO
*----------------------------------------------------------------------*
*       CLASS lcl_hourly_employee IMPLEMENTATION
*----------------------------------------------------------------------*
*
*----------------------------------------------------------------------*
CLASS lcl_hourly_employee IMPLEMENTATION.
  METHOD constructor.
*   Must call the constructor of the superclass first:
    CALL METHOD super->constructor( ).

*   Initialize the instance attributes:
    id = im_id.
    hourly_wage = im_wage.
  ENDMETHOD. "constructor

  METHOD calculate_wage.
*   Method-Local Data Declarations:
    DATA: lv_wages TYPE bapicurr_d.    "Calculated Wages

*   Calculate the weekly wages for the employee:
    lv_wages = co_workweek * hourly_wage.
    WRITE: / 'Employee #', id.
    WRITE: / 'Weekly Wage:', lv_wages.
  ENDMETHOD. "calculate_wage
ENDCLASS.                    "lcl_hourly_employee IMPLEMENTATION

*----------------------------------------------------------------------*
* START-OF-SELECTION Event Module                                      *
*----------------------------------------------------------------------*
START-OF-SELECTION.
  PERFORM test_employee.

*&---------------------------------------------------------------------*
*&      Form  test_employee
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
FORM test_employee.

* Local Data Declarations:
  DATA: lr_employee TYPE REF TO lcl_hourly_employee.

* Create an instance of class lcl_salaried_employee
* and call method "calculate_wage":
  CREATE OBJECT lr_employee
    EXPORTING
      im_id   = '1'
      im_wage = '10.00'.

  CALL METHOD lr_employee->calculate_wage( ).

ENDFORM.                    "test_employee